[アップデート] Amazon SQS DLQ のリドライブ送信先に FIFO タイプのキューが指定できるようになりました! #AWSreinvent
こんにちは、CX 事業本部のヒョンジェです。
2023/11/27 より Amazon SQS の DLQ(Dead-Letter Queue) のリドライブ送信先を FIFO(First In, First Out) タイプキューにも指定できるようになりましたので、その概要の共有と実際試してみたいと思います。
アップデート概要
SQS のキューでメッセージ処理に失敗した場合、処理をリトライし、すべで失敗したら DLQ にそのメッセージを送信するように設定することができます。こうすることで、処理に失敗しているメッセージを既存のキューから除外して、何が原因でメッセージ処理に失敗しているか調査することができます。
問題の調査・解消ができて、そのメッセージをまた処理したい場合は、DLQ からリドライブして既存のソースキューや他のキューにメッセージを入れることができます。今まではこのリドライブの送信先をスタンダードタイプのキューにしか指定できませんでしたが、アップデートにより FIFO タイプのキューにも指定できるようになりました。
試してみた
実際、FIFO タイプのキューを送信先としてリドライブをしてみます。
1. DLQ 作成
マネジメントコンソールから DLQ 用のキューを一つ作成します。DLQ のタイプとリドライブする送信先のキューのタイプは一致している必要があるので、DLQ のタイプは FIFO に設定します。
2. ソースキュー作成
普段メッセージを処理するソースキューを作成します。DLQ キューと同じく FIFO タイプに設定して作成します。
作成時は DLQ の設定をします。最大受信数は 3 にしておきます。
ここまですると、一つのメッセージを 3 回以上受信したら、DLQ にメッセージが送信されるようになります。
3. ソースキューにメッセージを入れる
後で DLQ に送信するメッセージをまず、ソースキューに入れます。コンソールから入れるか以下の CLI コマンドを叩いて入れます。
aws sqs send-message --queue-url ${QUEUE URL} --message-body "テスト" --message-group-id group1 --message-deduplication-id group2
4. ソースキューのメッセージを受信する
ソースキューに入れたメッセージを DLQ に送信するために、ソースキューから該当のメッセージを最大受信数の 3 回受信します。メッセージの受信は以下の CLI コマンドで行います。可視性タイムアウトがデフォルトで 30 秒になっているので、1 回受信してから 30 秒後にまた受信するようにします。
aws sqs receive-message --queue-url ${QUEUE URL}
CLI コマンドを 4 回叩いてら、ソースキューから該当のメッセージが消えていることがわかります。そして、コンソールからもメッセージがソースキューから DLQ に送信されたのが確認できます。
5. DLQ からリドライブする
では、最後に DLQ から FIFO タイプのソースキューにリドライブをします。
コンソールからリドライブの送信先をソースキューに設定して、リドライブを実行します(他のカスタムキューを設定することもできます)。メッセージが一個しかないので、すぐリドライブに成功します。
CLI コマンドでソースキューのメッセージを受信すると、該当のメッセージが受信されることが確認できます。
最後に
DLQ のリドライブ送信先に FIFO タイプのキューが設定できるようにアップデートされたので、試してみました。リドライブ機能は DLQ のメッセージをまた他のキューに入れて処理を行うときにとても有用ですが、スタンダード、FIFO 両方のタイプのキューを送信先として設定できるようになることで、もっとその活用が広がると思いました。